package com.leinao.media.service;

import com.alibaba.fastjson.JSONObject;
import com.leinao.media.entity.*;

import java.util.List;


/**
 * 流媒体Service接口
 *
 * @author zhangyu
 * @date 2021/12/1 15:56
 */
public interface MediaService {

    /**
     * 设备激活
     *
     * @param param 设备基础查询参数
     */
    void activateDevice(BaseDeviceParam param);

    /**
     * 设备注册
     *
     * @param param 设备基础查询参数
     * @return uid
     */
    long login(BaseDeviceParam param);

    /**
     * 登出
     *
     * @param param 登出参数
     */
    void logout(LogoutParam param);

    /**
     * 释放SDK资源
     */
    void cleanup(int type);

    /**
     * 获取设备状态
     *
     * @param param 设备基础查询参数
     * @return 设备状态
     */
    String getDeviceStatus(BaseDeviceParam param);

    /**
     * 获取设备下面的摄像机列表
     *
     * @param param 设备基础查询参数
     * @return 摄像机列表
     */
    List<Camera> getCameraList(BaseDeviceParam param);

    /**
     * 云台控制
     *
     * @param param 云台控制参数
     * @return String
     */
    String cloudPlatformControl(CloudPlatformControlParam param);

    /**
     * 预置位设置
     *
     * @param param 预置位参数
     */
    void setPresetLocation(PresetLocationParam param);

    /**
     * 录像起止时间查询
     *
     * @param param 录像查询参数
     * @return JSONObject
     */
    JSONObject searchVideoTime(VideoQueryParam param);

    /**
     * 月历查询
     *
     * @param param 录像查询参数
     * @return JSONArray
     */
    JSONObject getVideoMonth(VideoQueryParam param);

    /**
     * 录像文件查询
     *
     * @param param 录像查询参数
     * @return JSONArray
     */
    JSONObject findVideoFile(VideoQueryParam param);

    /**
     * 录像文件下载(通过时间)
     *
     * @param param 录像查询参数
     * @return JSONObject
     */
    JSONObject downloadVideoFileByTime(VideoDownloadParam param);

    /**
     * 下载进度获取参数
     *
     * @param param 键
     * @return 进度
     */
    int getDownLoadProgress(DownLoadProgressParam param);

    /**
     * 停止下载
     *
     * @param param 设备基础查询参数
     */
    void stopDownloadVideoFile(BaseDeviceParam param);

    /**
     * 开始录像
     *
     * @param param 录像查询参数
     * @return 视频预览标识位
     */
    JSONObject startMakeVideo(VideoQueryParam param);

    /**
     * 停止录像
     *
     * @param param 录像查询参数
     * @return 录像地址
     */
    String stopMakeVideo(VideoQueryParam param);

    /**
     * 抓图
     *
     * @param param 录像查询参数
     * @return 图片地址
     */
    String captureJpeg(CaptureJpegParam param);

    /**
     * 抓图_新
     *
     * @param param 录像查询参数
     * @return 图片地址
     */
    String captureJpegNew(CaptureJpegParam param);

    /**
     * 抓图_返回二进制流
     *
     * @param param 录像查询参数
     * @return 图片二进制流
     */
    String captureJpegStream(CaptureJpegParam param);

    /**
     * 根据二进制流获取图片
     *
     * @param param 二进制流图片参数
     * @return 图片路径
     */
    String getStreamCaptureJpeg(CaptureJpegStreamParam param);

    /**
     * 获取设备硬盘详情
     *
     * @param param 查询参数
     * @return JSONObject
     */
    JSONObject getDeviceDiskInfo(BaseDeviceParam param);

    /**
     * 获取录像回放地址
     *
     * @param param 录像回放参数
     * @return 回放地址
     */
    String getPlayBackAddress(VideoPlayBackParam param);

    /**
     * 设置测温规则
     *
     * @param param 测温规则参数
     */
    void setTemperatureRule(TemperatureRuleParam param);

    /**
     * 开启布防
     *
     * @param param 设备基础查询参数
     * @return 布防句柄
     */
    int setUpAlarm(BaseDeviceParam param);

    /**
     * 撤销布防
     *
     * @param param 撤销布防参数
     * @return boolean
     */
    boolean closeAlarmChan(CloseAlarmChanParam param);

    /**
     * 开启实时测温
     *
     * @param ip  红外ip
     * @param uid 用户id
     * @return 布防句柄
     */
    int setUpThermometry(String ip, long uid);

    /**
     * 关闭实时测温
     *
     * @param handle 测温句柄
     */
    boolean closeThermometry(int handle);

}
